﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Mvc;
using blacksoft.Models;
using blacksoft.Constantes;

namespace blacksoft.Controllers
{
    public class ProductoProveedorController : Controller
    {
        private inf245travelbusEntities db = new inf245travelbusEntities();

        // GET: /ProductoProveedor/
        public ActionResult Index()
        {
            // **** SEGURIDAD DE ACCESO ****
            ActionResult result_seguridad = ValidarSeguridad();
            if (result_seguridad != null)
            {
                return result_seguridad;
            }
            //  ------             --------
            // ****  GET ID Terminal    ****
            int idTerminal = (int)Session["IDTerminal"];
            //  ------             --------
            // ****    Check Global     ****
            bool global = PerfilsController.TienePermiso((int)Session["Permisos"], PerfilsController.GLOBAL);
            // ------              --------
            var producto_x_proveedor = db.Producto_x_Proveedor.Include(p => p.Persona).Include(p => p.Producto);
            producto_x_proveedor = producto_x_proveedor.Where(p => p.Estado == "AC");
            return View(producto_x_proveedor.ToList());
        }

        // GET: /ProductoProveedor/Details/5
        public ActionResult Details(int? id)
        {
            // **** SEGURIDAD DE ACCESO ****
            ActionResult result_seguridad = ValidarSeguridad();
            if (result_seguridad != null)
            {
                return result_seguridad;
            }
            //  ------             --------
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Producto_x_Proveedor producto_x_proveedor = db.Producto_x_Proveedor.Find(id);
            if (producto_x_proveedor == null)
            {
                return HttpNotFound();
            }
            return View(producto_x_proveedor);
        }

        // GET: /ProductoProveedor/Create
        public ActionResult Create(int? IDPersona)
        {
            // **** SEGURIDAD DE ACCESO ****
            ActionResult result_seguridad = ValidarSeguridad();
            if (result_seguridad != null)
            {
                return result_seguridad;
            }
            //  ------             --------
            var dbProveedores = from p in db.Persona
                      where p.TipoPersona == 1
                      select p;
            ViewBag.IDPersona = new SelectList(dbProveedores , "IDPersona", "RazonSocial");
            ViewBag.IDProducto = new SelectList(db.Producto, "IDProducto", "Nombre");
            return View();
        }

        // POST: /ProductoProveedor/Create
        // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
        // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        public RedirectResult Create([Bind(Include = "IDPersona,IDProducto,Precio,Estado,IDProducto_x_Proveedor")] Producto_x_Proveedor producto_x_proveedor)
        {
            bool exist = false;
            var dbPersona = from pers in db.Persona
                            where pers.IDPersona == producto_x_proveedor.IDPersona
                            select pers;
            try { 
                Persona personList = dbPersona.ToList().ElementAt(0);
                List<Producto_x_Proveedor> productList = personList.Producto_x_Proveedor.ToList();
                for (int i = 0; i < productList.Count; i++)
                {
                    if (productList[i].IDProducto == producto_x_proveedor.IDProducto)
                    {
                        exist = true;
                    }
                }
            }
            catch { }
                producto_x_proveedor.Estado = "AC";
            if (ModelState.IsValid && producto_x_proveedor.Precio>0 && !exist)
            {
                db.Producto_x_Proveedor.Add(producto_x_proveedor);
                db.SaveChanges();
                //return RedirectToAction("Index");
                return Redirect("/proveedor/Details/" + producto_x_proveedor.IDPersona.ToString());
            }
            if (producto_x_proveedor.Precio <= 0)
            {
                TempData["MODCOMP_ProdProv_create_failure_cant"] = "El precio debe ser un número positivo";
            }
            if (exist)
            {
                TempData["MODCOMP_ProdProv_create_failure_exis"] = "El producto ya existe";
            }
            ViewBag.IDPersona = new SelectList(db.Persona, "IDPersona", "Nombre", producto_x_proveedor.IDPersona);
            ViewBag.IDProducto = new SelectList(db.Producto, "IDProducto", "Nombre", producto_x_proveedor.IDProducto);
            //return View(producto_x_proveedor);
            TempData["MODCOMP_ProdProv_create_failure"] = "Datos incorrectos";
            return Redirect("/productoproveedor/create?IDPersona=" + producto_x_proveedor.IDPersona.ToString());
        }


        // GET: /ProductoProveedor/Edit/5
        public ActionResult Edit(int? id)
        {
            // **** SEGURIDAD DE ACCESO ****
            ActionResult result_seguridad = ValidarSeguridad();
            if (result_seguridad != null)
            {
                return result_seguridad;
            }
            //  ------             --------
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Producto_x_Proveedor producto_x_proveedor = db.Producto_x_Proveedor.Find(id);
            if (producto_x_proveedor == null)
            {
                return HttpNotFound();
            }
            ViewBag.IDPersona = new SelectList(db.Persona, "IDPersona", "RazonSocial", producto_x_proveedor.IDPersona);
            ViewBag.IDProducto = new SelectList(db.Producto, "IDProducto", "Nombre", producto_x_proveedor.IDProducto);
            return View(producto_x_proveedor);
        }

        // POST: /ProductoProveedor/Edit/5
        // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
        // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit([Bind(Include="IDPersona,IDProducto,Precio,Estado,IDProducto_x_Proveedor")] Producto_x_Proveedor producto_x_proveedor)
        {
            if (ModelState.IsValid)
            {
                db.Entry(producto_x_proveedor).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            ViewBag.IDPersona = new SelectList(db.Persona, "IDPersona", "Nombre", producto_x_proveedor.IDPersona);
            ViewBag.IDProducto = new SelectList(db.Producto, "IDProducto", "Nombre", producto_x_proveedor.IDProducto);
            return View(producto_x_proveedor);
        }

        // GET: /ProductoProveedor/Delete/5
        public ActionResult Delete(int? id)
        {
            // **** SEGURIDAD DE ACCESO ****
            ActionResult result_seguridad = ValidarSeguridad();
            if (result_seguridad != null)
            {
                return result_seguridad;
            }
            //  ------             --------
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Producto_x_Proveedor producto_x_proveedor = db.Producto_x_Proveedor.Find(id);
            if (producto_x_proveedor == null)
            {
                return HttpNotFound();
            }
            return View(producto_x_proveedor);
        }

        // POST: /ProductoProveedor/Delete/5
        [HttpPost, ActionName("Delete")]
        [ValidateAntiForgeryToken]
        public ActionResult DeleteConfirmed(int id)
        {
            Producto_x_Proveedor producto_x_proveedor = db.Producto_x_Proveedor.Find(id);
            //db.Producto_x_Proveedor.Remove(producto_x_proveedor);
            producto_x_proveedor.Estado = "IN";
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                db.Dispose();
            }
            base.Dispose(disposing);
        }

        private ActionResult ValidarSeguridad()
        {

            if (Session["Permisos"] == null)
            {
                TempData["LogueatePrimero"] = SystemField.NO_LOGUEADO;
                return RedirectToAction("Index", "ValidarLogin");
            }
            //ESTOY LOGUEADO PERO NO TENGO PERMISO PARA REALIZAR ESTA ACCION
            if (!PerfilsController.TienePermiso((int)Session["Permisos"], PerfilsController.COMPRAS))
            {
                TempData["SinPermiso"] = SystemField.SIN_PERMISO;
                return RedirectToAction("Index", "MainPageEmployes");
            }
            return null;
        }
    }
}
